/**
 * @file mpu6050.h
 * @author chushang (email:chushangcs@163.com)
 * @brief 解算MPU6050数据
 * @version 0.1
 * @date 2025-04-28
 *
 * @copyright Copyright (c) 2025
 *
 */

#ifndef __MPU6050_H
#define __MPU6050_H

#include "stm32f1xx_hal.h"

#define MPU6050_ADDR      0xD0 // MPU6050的地址

#define IIC_W_MASK        0x00
#define IIC_R_MASK        0x01

#define IIC_SCL_GPIO_PORT GPIOB
#define IIC_SCL_GPIO_PIN  GPIO_PIN_10

#define IIC_SDA_GPIO_PORT GPIOB
#define IIC_SDA_GPIO_PIN  GPIO_PIN_11

#define X                 0
#define Y                 1
#define Z                 2

// MPU6050原始数据
typedef struct
{
    int16_t acc[3];  // 加速度,单位g
    int16_t gyro[3]; // 角速度,单位°/s
    int16_t temp;    // 温度,单位摄氏度
} MPU6050_RawData;

// 解算后的IMU数据
typedef struct
{
    float yaw;
    float pitch;
    float roll;
    float temp; // 温度
} IMU_Data;

void    MPU6050_WriteReg(uint8_t reg, uint8_t val);
uint8_t MPU6050_ReadReg(uint8_t reg);
void    MPU6050_Init(void);
uint8_t MPU6050_GetID(void);
void    MPU6050_GetRawData(MPU6050_RawData *rd);
void    MPU6050_GetIMUData(IMU_Data *id, float period);

#endif // !__MPU6050_H
